url <- 'https://raw.githubusercontent.com/kyleknox3/STA553/main/week6/LifeIncomePopulation.csv'
data <- read.csv(url)
income <- na.omit(data)

data2015 <- income %>%
  filter(year == 2015)

write.csv(data2015, "/Users/kyleknox/Documents/M.S. Applied Statistics/SPRING 2024/STA533/week6/data2015.csv", row.names = FALSE)

regions <- c("Asia" = "#332288", "Europe" = "#117733", "Africa" = "#44AA99", "Americas" = "#88CCEE", "Oceania" = "#AA4499")

gg <- ggplot(data2015, aes(x = lifeExp, y = income, size = population, 
      color = region, text = paste("Country:", country,"<br>Population:", population, "<br>Income:", income))) +
  geom_point(alpha = 0.7) + 
  scale_size_continuous(range = c(1, 20)) + 
  theme_minimal() +
  labs(title = "Life Expectancy vs. Income in 2015",
       x = "Life Expectancy",
       y = "Income") +
  scale_color_manual(values = regions, name = "Region") + 
  geom_point(shape = 21, colour = "black", fill = NA) 


plotly_gg <- ggplotly(gg, tooltip = "text")

plotly_gg


A Look Inside 2015

In the year 2015, there is a positive correlation between life expectancy and income. The higher the average income for a country, the better access individuals have to healthcare, nutrition, and living conditions which directly impact life expectancy. The varying income across the regions of the world show how economic difficulties influence life expectancy. Countries in more developed regions have higher income and longer life expectancy compared to those of the underdeveloped world. However, when looking at population, the countries with larger populations could have a lower average due to resource allocation and the wealth gap. Therefore, looking at larger countries median income may be more beneficial. Overall, there is a general global trend towards higher life expectancy and income, signifying worldwide improvements in healthcare, technology, and economic development. Although, it is apparent that these improvements are not evenly distributed across the all regions of the world.



url <- 'https://raw.githubusercontent.com/kyleknox3/STA553/main/week6/LifeIncomePopulation.csv'
data <- read.csv(url)
income2 <- na.omit(data)

regions <- c("Asia" = "#332288", "Europe" = "#117733", "Africa" = "#44AA99", "Americas" = "#88CCEE", "Oceania" = "#AA4499")

plot <- ggplot(income2, aes(x = lifeExp, y = income, size = population, color = region)) +
  geom_point(alpha = 0.7, show.legend = TRUE, aes(group = year)) +
  scale_size(range = c(2, 12), name = "Population Size") +
  scale_color_manual(values = regions, name = "Region") +
  labs(title= 'Life Expectancy and Income Over the Years', subtitle = 'Year: {frame_time}', x = 'Life Expectancy', y = 'Income') +
  theme_minimal() +
  transition_time(year) +
  ease_aes('linear')

animate(plot, width = 900, height = 500, duration = 30)


A Look Inside the Income and Life Expextancy Across the World

There has been a significant increase in the average life expectancy globally since the early 1800s. The shift is more prevalent in the early 20th century. These life expectancy improvements could be related to advancements in healthcare, nutrition, and living conditions over time.

Income has an overall positive trend, with a steep incline after the mid 20th century. Some causes for these increases could be a result of industrialization, globalization, and technological advances that have influenced productivity. There is a significant increase in income in the late 20th century, which could be indicative of economic expansion.

The worlds population has also shown significant growth since the 1800s, with an acceleration in the rate of increase from the 20th century to present day. This increased population could be a result of decreased mortality rates, medical advancements, and other factors leading to higher birth rates and lower death rates. With a continued increase in the global population challenges like resource management, sustainability, and a detrimental environmental impact will arise.

With the increased income, population, and life expectancy over the past few centuries, it shows the the global economic increases for the worlds population. However, these increases do provide challenges for the future in sustainability and the distribution of resources. These challenges are not just limited regionally but also globally.



LS0tCnRpdGxlOiAiTGlmZSBFeHBlY3RhbmN5IGFuZCBJbmNvbWUgZm9yIHRoZSBZZWFyIDIwMTUiCmF1dGhvcjogIkt5bGUgS25veCIKZGF0ZTogIldlZWsgNiIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIGZpZ193aWR0aDogNgogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvY19jb2xsYXBzZWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIHNtb290aF9zY3JvbGw6IHRydWUKICAgIHRoZW1lOiByZWFkYWJsZQogICAgZmlnX2hlaWdodDogNAotLS0KICAKICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogIAogIGRpdiNUT0MgbGkgewpsaXN0LXN0eWxlOm5vbmU7CmJhY2tncm91bmQtY29sb3I6bGlnaHRncmF5OwpiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CmJhY2tncm91bmQtcmVwZWF0Om5vbmU7CmJhY2tncm91bmQtcG9zaXRpb246MDsKZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CmNvbG9yOiAjNzgwYzBjOwogIH0KCi8qIG1vdXNlIG92ZXIgbGluayAqLwogIGRpdiNUT0MgYTpob3ZlciB7CmNvbG9yOiByZWQ7Cn0KCi8qIHVudmlzaXRlZCBsaW5rICovCiAgZGl2I1RPQyBhOmxpbmsgewpjb2xvcjogYmx1ZTsKfQoKCgpoMS50aXRsZSB7CiAgZm9udC1zaXplOiAyNHB4OwogIGNvbG9yOiBEYXJrYmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CiAgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsKfQpoNC5hdXRob3IgeyAKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IERhcmtSZWQ7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cmg0LmRhdGUgeyAKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoMSB7CiAgZm9udC1zaXplOiAyMnB4OwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBkYXJrcmVkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoMiB7IC8KICAgIGZvbnQtc2l6ZTogMThweDsKICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICBjb2xvcjogbmF2eTsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoMyB7IAogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICBjb2xvcjogbmF2eTsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IGRhcmtyZWQ7CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLyogdW52aXNpdGVkIGxpbmsgKi8KICBhOmxpbmsgewogICAgY29sb3I6IGdyZWVuOwogIH0KCi8qIHZpc2l0ZWQgbGluayAqLwogIGE6dmlzaXRlZCB7CiAgICBjb2xvcjogZ3JlZW47CiAgfQoKLyogbW91c2Ugb3ZlciBsaW5rICovCiAgYTpob3ZlciB7CiAgICBjb2xvcjogcmVkOwogIH0KCi8qIHNlbGVjdGVkIGxpbmsgKi8KICBhOmFjdGl2ZSB7CiAgICBjb2xvcjogeWVsbG93OwogIH0KCjwvc3R5bGU+CiAgCiAgCiAgYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCAKIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuCm9wdGlvbnMocmVwb3MgPSBsaXN0KENSQU49Imh0dHA6Ly9jcmFuLnJzdHVkaW8uY29tLyIpKQppZiAoIXJlcXVpcmUoInRpZHl2ZXJzZSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikKICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpCiAgbGlicmFyeShrbml0cikKfQppZiAoIXJlcXVpcmUoImNvd3Bsb3QiKSkgewogIGluc3RhbGwucGFja2FnZXMoImNvd3Bsb3QiKQogIGxpYnJhcnkoY293cGxvdCkKfQppZiAoIXJlcXVpcmUoImxhdGV4MmV4cCIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygibGF0ZXgyZXhwIikKICBsaWJyYXJ5KGxhdGV4MmV4cCkKfQppZiAoIXJlcXVpcmUoInBsb3RseSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikKICBsaWJyYXJ5KHBsb3RseSkKfQppZiAoIXJlcXVpcmUoImdhcG1pbmRlciIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2FwbWluZGVyIikKICBsaWJyYXJ5KGdhcG1pbmRlcikKfQppZiAoIXJlcXVpcmUoInBuZyIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygicG5nIikgICAgICAgICAgICAgIyBJbnN0YWxsIHBuZyBwYWNrYWdlCiAgbGlicmFyeSgicG5nIikKfQppZiAoIXJlcXVpcmUoIlJDdXJsIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJSQ3VybCIpICAgICAgICAgICAgICMgSW5zdGFsbCBSQ3VybCBwYWNrYWdlCiAgbGlicmFyeSgiUkN1cmwiKQp9CmlmICghcmVxdWlyZSgiY29sb3VycGlja2VyIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJjb2xvdXJwaWNrZXIiKSAgICAgICAgICAgICAgCiAgbGlicmFyeSgiY29sb3VycGlja2VyIikKfQppZiAoIXJlcXVpcmUoImdpZnNraSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2lmc2tpIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImdpZnNraSIpCn0KaWYgKCFyZXF1aXJlKCJtYWdpY2siKSkgewogIGluc3RhbGwucGFja2FnZXMoIm1hZ2ljayIpICAgICAgICAgICAgICAKICBsaWJyYXJ5KCJtYWdpY2siKQp9CmlmICghcmVxdWlyZSgiZ3JEZXZpY2VzIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJnckRldmljZXMiKSAgICAgICAgICAgICAgCiAgbGlicmFyeSgiZ3JEZXZpY2VzIikKfQojIyMgZ2dwbG90IGFuZCBleHRlbnNpb25zCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICAgICAgICAgICAgICAKICBsaWJyYXJ5KCJnZ3Bsb3QyIikKfQppZiAoIXJlcXVpcmUoImdnYW5pbWF0ZSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dhbmltYXRlIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImdnYW5pbWF0ZSIpCn0KaWYgKCFyZXF1aXJlKCJnZ3JpZGdlcyIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dyaWRnZXMiKSAgICAgICAgICAgICAgCiAgbGlicmFyeSgiZ2dyaWRnZXMiKQp9CmlmICghcmVxdWlyZSgiZHBseXIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImRwbHlyIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImRwbHlyIikKfQppZiAoIXJlcXVpcmUoImh0bWx0b29scyIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiaHRtbHRvb2xzIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImh0bWx0b29scyIpCn0KaWYgKCFyZXF1aXJlKCJybWFya2Rvd24iKSkgewogIGluc3RhbGwucGFja2FnZXMoInJtYXJrZG93biIpICAgICAgICAgICAgICAKICBsaWJyYXJ5KCJybWFya2Rvd24iKQp9CiMga25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiL1VzZXJzL2t5bGVrbm94L0RvY3VtZW50cy9NLlMuIEFwcGxpZWQgU3RhdGlzdGljcy9TUFJJTkcgMjAyNC9TVEE1MzMvd2VlazYpCiMga25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiQzpcXFNUQTQ5MFxcdzA1IikKCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgCiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBUUlVFLCAgIAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFKQpgYGAKYGBge3IgY29kZSwgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTYuOH0KdXJsIDwtICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20va3lsZWtub3gzL1NUQTU1My9tYWluL3dlZWs2L0xpZmVJbmNvbWVQb3B1bGF0aW9uLmNzdicKZGF0YSA8LSByZWFkLmNzdih1cmwpCmluY29tZSA8LSBuYS5vbWl0KGRhdGEpCgpkYXRhMjAxNSA8LSBpbmNvbWUgJT4lCiAgZmlsdGVyKHllYXIgPT0gMjAxNSkKCndyaXRlLmNzdihkYXRhMjAxNSwgIi9Vc2Vycy9reWxla25veC9Eb2N1bWVudHMvTS5TLiBBcHBsaWVkIFN0YXRpc3RpY3MvU1BSSU5HIDIwMjQvU1RBNTMzL3dlZWs2L2RhdGEyMDE1LmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKcmVnaW9ucyA8LSBjKCJBc2lhIiA9ICIjMzMyMjg4IiwgIkV1cm9wZSIgPSAiIzExNzczMyIsICJBZnJpY2EiID0gIiM0NEFBOTkiLCAiQW1lcmljYXMiID0gIiM4OENDRUUiLCAiT2NlYW5pYSIgPSAiI0FBNDQ5OSIpCgpnZyA8LSBnZ3Bsb3QoZGF0YTIwMTUsIGFlcyh4ID0gbGlmZUV4cCwgeSA9IGluY29tZSwgc2l6ZSA9IHBvcHVsYXRpb24sIAogICAgICBjb2xvciA9IHJlZ2lvbiwgdGV4dCA9IHBhc3RlKCJDb3VudHJ5OiIsIGNvdW50cnksIjxicj5Qb3B1bGF0aW9uOiIsIHBvcHVsYXRpb24sICI8YnI+SW5jb21lOiIsIGluY29tZSkpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNykgKyAKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDEsIDIwKSkgKyAKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiTGlmZSBFeHBlY3RhbmN5IHZzLiBJbmNvbWUgaW4gMjAxNSIsCiAgICAgICB4ID0gIkxpZmUgRXhwZWN0YW5jeSIsCiAgICAgICB5ID0gIkluY29tZSIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVnaW9ucywgbmFtZSA9ICJSZWdpb24iKSArIAogIGdlb21fcG9pbnQoc2hhcGUgPSAyMSwgY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSAKCgpwbG90bHlfZ2cgPC0gZ2dwbG90bHkoZ2csIHRvb2x0aXAgPSAidGV4dCIpCgpwbG90bHlfZ2cKCmBgYAoKPGJyPgo8YnI+CjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+QSBMb29rIEluc2lkZSAyMDE1PC9zcGFuPjwvZGl2PgoKPGRpdiBzdHlsZT0id2lkdGg6IDk1JTsgbWFyZ2luOiAwIGF1dG87IHRleHQtYWxpZ246IGp1c3RpZnk7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDEwcHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij4KICA8cCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsiPgpJbiB0aGUgeWVhciAyMDE1LCB0aGVyZSBpcyBhIHBvc2l0aXZlIGNvcnJlbGF0aW9uIGJldHdlZW4gbGlmZSBleHBlY3RhbmN5IGFuZCBpbmNvbWUuIFRoZSBoaWdoZXIgdGhlIGF2ZXJhZ2UgaW5jb21lIGZvciBhIGNvdW50cnksIHRoZSBiZXR0ZXIgYWNjZXNzIGluZGl2aWR1YWxzIGhhdmUgdG8gaGVhbHRoY2FyZSwgbnV0cml0aW9uLCBhbmQgbGl2aW5nIGNvbmRpdGlvbnMgd2hpY2ggZGlyZWN0bHkgaW1wYWN0IGxpZmUgZXhwZWN0YW5jeS4gVGhlIHZhcnlpbmcgaW5jb21lIGFjcm9zcyB0aGUgcmVnaW9ucyBvZiB0aGUgd29ybGQgc2hvdyBob3cgZWNvbm9taWMgZGlmZmljdWx0aWVzIGluZmx1ZW5jZSBsaWZlIGV4cGVjdGFuY3kuICBDb3VudHJpZXMgaW4gbW9yZSBkZXZlbG9wZWQgcmVnaW9ucyBoYXZlIGhpZ2hlciBpbmNvbWUgYW5kIGxvbmdlciBsaWZlIGV4cGVjdGFuY3kgY29tcGFyZWQgdG8gdGhvc2Ugb2YgdGhlIHVuZGVyZGV2ZWxvcGVkIHdvcmxkLiBIb3dldmVyLCB3aGVuIGxvb2tpbmcgYXQgcG9wdWxhdGlvbiwgdGhlIGNvdW50cmllcyB3aXRoIGxhcmdlciBwb3B1bGF0aW9ucyBjb3VsZCBoYXZlIGEgbG93ZXIgYXZlcmFnZSBkdWUgdG8gcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgdGhlIHdlYWx0aCBnYXAuIFRoZXJlZm9yZSwgbG9va2luZyBhdCBsYXJnZXIgY291bnRyaWVzIG1lZGlhbiBpbmNvbWUgbWF5IGJlIG1vcmUgYmVuZWZpY2lhbC4gT3ZlcmFsbCwgdGhlcmUgaXMgYSBnZW5lcmFsIGdsb2JhbCB0cmVuZCB0b3dhcmRzIGhpZ2hlciBsaWZlIGV4cGVjdGFuY3kgYW5kIGluY29tZSwgc2lnbmlmeWluZyB3b3JsZHdpZGUgaW1wcm92ZW1lbnRzIGluIGhlYWx0aGNhcmUsIHRlY2hub2xvZ3ksIGFuZCBlY29ub21pYyBkZXZlbG9wbWVudC4gIEFsdGhvdWdoLCBpdCBpcyBhcHBhcmVudCB0aGF0IHRoZXNlIGltcHJvdmVtZW50cyBhcmUgbm90IGV2ZW5seSBkaXN0cmlidXRlZCBhY3Jvc3MgdGhlIGFsbCByZWdpb25zIG9mIHRoZSB3b3JsZC4gPGJyPiAKIDwvcD4KPC9kaXY+Cjxicj4KPGJyPgoKYGBge3IgcGxvdC1hbmltYXRpb24sIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD02Ljh9CnVybCA8LSAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2t5bGVrbm94My9TVEE1NTMvbWFpbi93ZWVrNi9MaWZlSW5jb21lUG9wdWxhdGlvbi5jc3YnCmRhdGEgPC0gcmVhZC5jc3YodXJsKQppbmNvbWUyIDwtIG5hLm9taXQoZGF0YSkKCnJlZ2lvbnMgPC0gYygiQXNpYSIgPSAiIzMzMjI4OCIsICJFdXJvcGUiID0gIiMxMTc3MzMiLCAiQWZyaWNhIiA9ICIjNDRBQTk5IiwgIkFtZXJpY2FzIiA9ICIjODhDQ0VFIiwgIk9jZWFuaWEiID0gIiNBQTQ0OTkiKQoKcGxvdCA8LSBnZ3Bsb3QoaW5jb21lMiwgYWVzKHggPSBsaWZlRXhwLCB5ID0gaW5jb21lLCBzaXplID0gcG9wdWxhdGlvbiwgY29sb3IgPSByZWdpb24pKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNywgc2hvdy5sZWdlbmQgPSBUUlVFLCBhZXMoZ3JvdXAgPSB5ZWFyKSkgKwogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDEyKSwgbmFtZSA9ICJQb3B1bGF0aW9uIFNpemUiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlZ2lvbnMsIG5hbWUgPSAiUmVnaW9uIikgKwogIGxhYnModGl0bGU9ICdMaWZlIEV4cGVjdGFuY3kgYW5kIEluY29tZSBPdmVyIHRoZSBZZWFycycsIHN1YnRpdGxlID0gJ1llYXI6IHtmcmFtZV90aW1lfScsIHggPSAnTGlmZSBFeHBlY3RhbmN5JywgeSA9ICdJbmNvbWUnKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0cmFuc2l0aW9uX3RpbWUoeWVhcikgKwogIGVhc2VfYWVzKCdsaW5lYXInKQoKYW5pbWF0ZShwbG90LCB3aWR0aCA9IDkwMCwgaGVpZ2h0ID0gNTAwLCBkdXJhdGlvbiA9IDMwKQpgYGAKPGJyPgo8YnI+CjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+QSBMb29rIEluc2lkZSB0aGUgSW5jb21lIGFuZCBMaWZlIEV4cGV4dGFuY3kgQWNyb3NzIHRoZSBXb3JsZDwvc3Bhbj48L2Rpdj4KCjxkaXYgc3R5bGU9IndpZHRoOiA5NSU7IG1hcmdpbjogMCBhdXRvOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiAxMHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyI+CiAgPHAgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7Ij4KVGhlcmUgaGFzIGJlZW4gYSBzaWduaWZpY2FudCBpbmNyZWFzZSBpbiB0aGUgYXZlcmFnZSBsaWZlIGV4cGVjdGFuY3kgZ2xvYmFsbHkgc2luY2UgdGhlIGVhcmx5IDE4MDBzLiAgVGhlIHNoaWZ0IGlzIG1vcmUgcHJldmFsZW50IGluIHRoZSBlYXJseSAyMHRoIGNlbnR1cnkuICBUaGVzZSBsaWZlIGV4cGVjdGFuY3kgaW1wcm92ZW1lbnRzIGNvdWxkIGJlIHJlbGF0ZWQgdG8gYWR2YW5jZW1lbnRzIGluIGhlYWx0aGNhcmUsIG51dHJpdGlvbiwgYW5kIGxpdmluZyBjb25kaXRpb25zIG92ZXIgdGltZS4gPGJyPgo8YnI+CkluY29tZSBoYXMgYW4gb3ZlcmFsbCBwb3NpdGl2ZSB0cmVuZCwgd2l0aCBhIHN0ZWVwIGluY2xpbmUgYWZ0ZXIgdGhlIG1pZCAyMHRoIGNlbnR1cnkuICBTb21lIGNhdXNlcyBmb3IgdGhlc2UgaW5jcmVhc2VzIGNvdWxkIGJlIGEgcmVzdWx0IG9mIGluZHVzdHJpYWxpemF0aW9uLCBnbG9iYWxpemF0aW9uLCBhbmQgdGVjaG5vbG9naWNhbCBhZHZhbmNlcyB0aGF0IGhhdmUgaW5mbHVlbmNlZCBwcm9kdWN0aXZpdHkuIFRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgaW5jcmVhc2UgaW4gaW5jb21lIGluIHRoZSBsYXRlIDIwdGggY2VudHVyeSwgd2hpY2ggY291bGQgYmUgaW5kaWNhdGl2ZSBvZiBlY29ub21pYyBleHBhbnNpb24uIDxicj4KPGJyPgpUaGUgd29ybGRzIHBvcHVsYXRpb24gaGFzIGFsc28gc2hvd24gc2lnbmlmaWNhbnQgZ3Jvd3RoIHNpbmNlIHRoZSAxODAwcywgd2l0aCBhbiBhY2NlbGVyYXRpb24gaW4gdGhlIHJhdGUgb2YgaW5jcmVhc2UgZnJvbSB0aGUgMjB0aCBjZW50dXJ5IHRvIHByZXNlbnQgZGF5LiAgVGhpcyBpbmNyZWFzZWQgcG9wdWxhdGlvbiBjb3VsZCBiZSBhIHJlc3VsdCBvZiBkZWNyZWFzZWQgbW9ydGFsaXR5IHJhdGVzLCBtZWRpY2FsIGFkdmFuY2VtZW50cywgYW5kIG90aGVyIGZhY3RvcnMgbGVhZGluZyB0byBoaWdoZXIgYmlydGggcmF0ZXMgYW5kIGxvd2VyIGRlYXRoIHJhdGVzLiBXaXRoIGEgY29udGludWVkIGluY3JlYXNlIGluIHRoZSBnbG9iYWwgcG9wdWxhdGlvbiBjaGFsbGVuZ2VzIGxpa2UgcmVzb3VyY2UgbWFuYWdlbWVudCwgc3VzdGFpbmFiaWxpdHksIGFuZCBhIGRldHJpbWVudGFsIGVudmlyb25tZW50YWwgaW1wYWN0IHdpbGwgYXJpc2UuPGJyPgo8YnI+CldpdGggdGhlIGluY3JlYXNlZCBpbmNvbWUsIHBvcHVsYXRpb24sIGFuZCBsaWZlIGV4cGVjdGFuY3kgb3ZlciB0aGUgcGFzdCBmZXcgY2VudHVyaWVzLCBpdCBzaG93cyB0aGUgdGhlIGdsb2JhbCBlY29ub21pYyBpbmNyZWFzZXMgZm9yIHRoZSB3b3JsZHMgcG9wdWxhdGlvbi4gIEhvd2V2ZXIsIHRoZXNlIGluY3JlYXNlcyBkbyBwcm92aWRlIGNoYWxsZW5nZXMgZm9yIHRoZSBmdXR1cmUgaW4gc3VzdGFpbmFiaWxpdHkgYW5kIHRoZSBkaXN0cmlidXRpb24gb2YgcmVzb3VyY2VzLiBUaGVzZSBjaGFsbGVuZ2VzIGFyZSBub3QganVzdCBsaW1pdGVkIHJlZ2lvbmFsbHkgYnV0IGFsc28gZ2xvYmFsbHkuPGJyPgogPC9wPgo8L2Rpdj4KPGJyPgo8YnI+Cgo=